package com.gs.view.impostazioni;

import java.util.Observable;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.gs.Controllore;
import com.gs.R;
import com.gs.business.IAggiornatoreModel;
import com.gs.business.cache.CacheGruppi;
import com.gs.business.comadi.gruppi.CommandDeleteGruppo;
import com.gs.business.comadi.gruppi.CommandInserisciGruppo;
import com.gs.business.comadi.gruppi.CommandUpdateGruppo;
import com.gs.domain.Gruppi;
import com.gs.domain.wrapper.WrapGruppi;
import com.gs.view.riepilogo.ListaGruppi;
import comi.gsi.command.CommandManager;

public class GruppiView extends AbstractGruppiView implements IAggiornatoreModel {

	private final EditText nome = null;
	private final EditText descrizione = null;
	private Button inserisciOaggiorna = null;
	private Button viewOrCanc = null;

	@Override
	protected int getIdLayout() {
		return R.layout.gruppi;
	}

	public void initForSpecificUse(final int prova) {
		if (prova != 0) {
			Gruppi gruppo = CacheGruppi.getSingleton().getGruppo(Integer.toString(prova));
			this.setModelGruppi(new WrapGruppi(gruppo));
			update(this.modelGruppi, null);
			getInserisciOaggiorna().setText("Aggiorna");
			getViewOrCanc().setText("Elimina");
		} else {
			getInserisciOaggiorna().setText("Inserisci");
			setModelGruppi(new WrapGruppi());
		}
	}

	@Override
	protected void myOnCreate(final Bundle savedInstanceState) {

		Intent i = getIntent();
		int prova = i.getIntExtra("idGruppo", 0);

		initForSpecificUse(prova);

		inserisciOaggiorna = (Button) lazyLoad(inserisciOaggiorna, R.id.gruppoBtnInserisci);
		inserisciOaggiorna.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(final View v) {
				final Gruppi clonata = ((Gruppi) getModelGruppi().getEntitaPadre()).clona();
				aggiornaModelDaVista();
				if (inserisciOaggiorna.getText().equals("Inserisci")) {
					if (Controllore.invocaComando(new CommandInserisciGruppo(getModelGruppi()))) {
						Toast.makeText(GruppiView.this, "Gruppo inserito correttamente", Toast.LENGTH_SHORT).show();
					}
				} else if (inserisciOaggiorna.getText().equals("Aggiorna")) {
					if (Controllore.invocaComando(new CommandUpdateGruppo(clonata, (Gruppi) getModelGruppi().getEntitaPadre()))) {
						Toast.makeText(GruppiView.this, "Gruppo aggiornata correttamente", Toast.LENGTH_SHORT).show();
					}
				}
			}
		});
		viewOrCanc = (Button) lazyLoad(viewOrCanc, R.id.gruppoBtnVisualizza);
		viewOrCanc.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(final View v) {
				if (getViewOrCanc().getText().equals("Visualizza")) {
					final Intent i = new Intent(v.getContext(), ListaGruppi.class);
					v.getContext().startActivity(i);
				} else if (getViewOrCanc().getText().equals("Elimina")) {
					aggiornaModelDaVista();
					CommandDeleteGruppo cancGruppo = new CommandDeleteGruppo((Gruppi) getModelGruppi().getEntitaPadre());
					if (CommandManager.getIstance().invocaComando(cancGruppo)) {
						Toast.makeText(GruppiView.this, "Gruppo eliminato correttamente", Toast.LENGTH_SHORT).show();
					}
				}
			}
		});

	}

	@Override
	public void update(final Observable observable, final Object data) {
		// TODO Auto-generated method stub

	}

	@Override
	public void aggiornaModelDaVista() {
		// TODO Auto-generated method stub

	}

	public EditText getEditNome() {
		return (EditText) lazyLoad(nome, R.id.editGruppoNome);
	}

	public EditText getEditDescrizione() {
		return (EditText) lazyLoad(descrizione, R.id.editGruppoDescrizione);
	}

	public Button getInserisciOaggiorna() {
		return (Button) lazyLoad(inserisciOaggiorna, R.id.gruppoBtnInserisci);
	}

	public Button getViewOrCanc() {
		return (Button) lazyLoad(viewOrCanc, R.id.gruppoBtnVisualizza);
	}

}
